home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / risc_src.lha / risc_sources / sys / fs_parse.t < prev    next >
Text File  |  1989-06-30  |  1KB  |  36 lines

  1. (herald fs_parse (env tsys))
  2.  
  3. ;;; Parser for system dependent strings
  4.  
  5. (define (string->filename path path-delimiter type-delimiter)
  6.   (let* ((len  (string-length path))
  7.          (i    (substring-reverse-find-char path path-delimiter 0 len))
  8.          (dir  (if i (substring path 0 i) nil))
  9.          (j    (substring-reverse-find-char path
  10.                                             type-delimiter
  11.                                             (if i i 0)
  12.                                             len))
  13.          (type (if j (substring path (fx+ j 1) (fx- len (fx+ j 1))) nil))
  14.          (i    (if i (fx+ i 1) 0))
  15.          (cnt  (fx- (if j j len) i))
  16.          (name (substring path i cnt)))
  17.       (make-filename nil dir name type)))
  18.  
  19.  
  20. (define (substring-find-char string ch start end)
  21.   (let* ((string (enforce string? string))
  22.          (ch (enforce char? ch)))
  23.       (iterate loop ((i start))
  24.         (cond ((fx>= i end) nil)
  25.               ((char= (nthchar string i) ch) i)
  26.               (else (loop (fx+ i 1)))))))
  27.  
  28. (define (substring-reverse-find-char string ch start end)
  29.   (let ((string (enforce string? string))
  30.         (ch (enforce char? ch)))
  31.     (iterate loop ((i end))
  32.       (let ((i (fx- i 1)))
  33.         (cond ((fx< i start) nil)
  34.               ((char= (nthchar string i) ch) i)
  35.               (else (loop i)))))))
  36.